import { NextResponse } from "next/server"

const recipeExtractorPrompt = `你是一个专门用于从调酒师描述中提取配方信息的AI助手。
请从调酒师的描述中提取关键信息，并以简洁的JSON格式输出。

输出格式要求：
1. 所有属性名使用双引号
2. 所有字符串值使用双引号
3. 配料信息要包含颜色属性，用于前端展示
4. 确保JSON格式完全正确

输出示例：
{
  "category": "经典调酒",
  "nameEn": "英文名称",
  "nameZh": "中文名称",
  "ingredients": [
    {
      "name": "配料名称",
      "amount": "用量",
      "color": "颜色代码，如#FF0000"
    }
  ],
  "method": [
    "步骤1",
    "步骤2"
  ]
}`

export async function POST(req: Request) {
  try {
    const { content } = await req.json()

    const payload = {
      model: process.env.model || "gemini-2.0-flash-thinking-exp-01-21",
      messages: [
        { role: "system", content: recipeExtractorPrompt },
        { role: "user", content }
      ],
      temperature: 0.7,
      max_tokens: 2000,
    }

    const response = await fetch(process.env.base_url + '/v1/chat/completions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${process.env.api_key}`,
      },
      body: JSON.stringify(payload),
    })

    if (!response.ok) {
      throw new Error(`API错误: ${response.statusText}`)
    }

    const data = await response.json()
    
    try {
      // 获取AI返回的内容
      let content = data.choices[0].message.content.trim()
      
      // 如果内容被markdown代码块包裹，提取JSON部分
      if (content.startsWith('```')) {
        const matches = content.match(/```(?:json)?\n([\s\S]*?)\n```/)
        if (matches && matches[1]) {
          content = matches[1].trim()
        }
      }
      
      console.log('处理后的JSON内容:', content)
      const recipeData = JSON.parse(content)
      return NextResponse.json(recipeData)
    } catch (e) {
      console.error('JSON解析错误:', e)
      console.error('原始内容:', data.choices[0].message.content)
      throw new Error('配方提取失败：JSON格式错误')
    }

  } catch (error) {
    console.error('配方提取错误:', error)
    return NextResponse.json(
      {
        error: error instanceof Error ? error.message : "配方提取失败",
        timestamp: new Date().toISOString(),
      },
      { status: 500 }
    )
  }
} 

// 输出格式要求：
// 1. 所有属性名使用双引号
// 2. 所有字符串值使用双引号
// 3. 配料信息要包含颜色属性，用于前端展示
// 4. 确保JSON格式完全正确